package ThreadingSafety;

/**
 *  演示构造方法的局限性.
 */

// 表示平面上的一个点
class Point {
    /* 通过笛卡尔坐标系进行构造.
    public Point(double x, double y) {
    }
    极坐标进行构造, r表示半径,a表示角度
    public  Point(double r,double a) {
    }
    很明显这两个构造方法不能同时存在, 无法形成重载.解决这个问题就可以使用普通方法,
    代替构造方法.在普通方法里分别构造出Point对象,再通过其他一些手段进行设置.
    代码如下:
     */

    // 通过笛卡尔坐标系进行构造.
    public static Point makePointByXY(double x, double y) {
        Point p = new Point();
        p.setX(x);
        p.setY(y);
        return p;
    }
    private void setX(double x) { }
    private void setY(double y) { }

    //极坐标进行构造, r表示半径,a表示角度
    public static Point makePointByRA(double r, double a) {
        Point p = new Point();
        p.setR(r);
        p.setA(a);
        return p;
    }
    private void setR(double r) { }
    private void setA(double a) { }

    //以上的makePointByXY 和 makePointByRA 方法就叫工厂方法, 这种设计模式就叫 工厂模式.

}
public class TestDemo24Child {
    public static void main(String[] args) {
        Point p1 = Point.makePointByXY(10,20);
        Point p2 = Point.makePointByRA(3,45);
    }
}
